package com.zjl.springmvc.config.注解配置SpringMVC;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;
//import jakarta.servlet.Filter;//

/**
 * 1、创建初始化类，代替web.xml  spring boot有  会冲突
 * 只有前三个是必须实现的
 * 在Servlet3.0环境中，
 * 容器会在类路径中查找实现
 * javax.servlet.ServletContainerInitializer接口的类，如果找到的
 * 话就用它来配置Servlet容器。
 * Spring提供了这个接口的实现，名为SpringServletContainerInitializer,
 * 这个类反过来又会查找实现
 * WebApplicationInitializer的类并将配置的任务交给它们来完成。
 * Spring3.2引入了一个便利的
 * WebApplicationInitializer基础实现，
 * 名为 AbstractAnnotationConfigDispatcherServletInitializer,
 * 当我们的类扩展了AbstractAnnotationConfigDispatcherServletInitializer
 * 并将其部署到Servlet3.0容器的时候，容器会自动发现它，并用它来配置Servlet上下文。
 *
 */
@Configuration//表示是一个配置类
public class WebXml extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override//spring 配置
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override//spring mvc 配置
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override//指定DispatcherServlet的映射规则，即url -pattern
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 注册过滤器
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter cef = new CharacterEncodingFilter();
        cef.setEncoding("UTF-8");
        cef.setForceResponseEncoding(true);
        HiddenHttpMethodFilter h = new HiddenHttpMethodFilter();

        return new Filter[]{cef,h};
    }
}

